package com.example.roadeyeserver.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.example.roadeyeserver.entity.GantryHourFlowWide;
import com.example.roadeyeserver.entity.report.*;
import com.example.roadeyeserver.entity.request.CommonRequest;
import com.example.roadeyeserver.entity.request.CrossOverviewStatisticRequest;
import com.example.roadeyeserver.entity.request.FestivalTrafficRequest;
import com.example.roadeyeserver.entity.request.RoadStatisticRequest;
import com.example.roadeyeserver.entity.vo.GantryHourFlowWideVO;
import com.example.roadeyeserver.result.Result;

import java.util.List;

public interface GantryHourFlowWideService extends IService<GantryHourFlowWide> {

    /**
     * 断面流量-断面流量总览
     * @param request
     * @return
     */
    Result<CrossOverviewReport> getCrossOverviewReport(CommonRequest request);

    /**
     * 路段流量-线路流量总览
     * @param request
     * @return
     */
    Result<List<RoadFlowReport>> getRoadFlowReport(CommonRequest request);

    /**
     * 断面流量-断面流量排名
     * @param request
     * @return
     */
    Result<List<TrafficRankReport>> getTrafficRankReport(CommonRequest request);

    /**
     * 路段流量-线路流量排名
     * @param request
     * @return
     */
    Result<List<RoadRankReport>> getRoadRankReport(CommonRequest request);

    /**
     * 断面流量-断面流量统计(车型和方向两个类型)(车型只分大车型)
     * @param request
     * @return
     */
    Result<List<CrossOverviewStatisticReport>> getCrossOverviewStatisticReport(CrossOverviewStatisticRequest request);

    /**
     * 路段流量-线路流量统计(车型和方向两个类型)(车型只分大车型)
     * @param request
     * @return
     */
    Result<List<CrossOverviewStatisticReport>> getRoadStatisticReport(RoadStatisticRequest request);

    /**
     * 断面流量-获取门架流量聚合,分车型(精确到小车型)饼图
     * @param request
     * @return
     */
    Result<GantryHourFlowWideVO> getGantryHourFlowWideList(CrossOverviewStatisticRequest request);

    /**
     * 路段流量-获取路段流量聚合,分车型(精确到小车型)饼图
     * @param request
     * @return
     */
    Result<GantryHourFlowWideVO> getRoadFlowList(RoadStatisticRequest request);

    /**
     * 断面流量-断面流量具体车型号细分统计(精确到小车型)柱状图和折线图
     * @param request
     * @return
     */
    Result<List<GantryHourFlowWideVO>> getCrossOverviewCarReport(CrossOverviewStatisticRequest request);

    /**
     * 路段流量-路段流量具体车型号细分统计(精确到小车型)柱状图和折线图
     * @param request
     * @return
     */
    Result<List<CrossOverviewStatisticReport>> getRoadCarReport(RoadStatisticRequest request);

    /**
     * 断面流量-地图撒点
     * @param request
     * @return
     */
    Result<List<CrossOverviewStatisticReport>> getGantryFlowReport(CommonRequest request);

    /**
     * 根据开始和结束收费站获取对应的门架id列表
     * @param startStationId
     * @param endStationId
     * @return
     */
    List<String> getGantryIdsByStartEndStationId(String startStationId, String endStationId);


    /**
     * 路段流量-线路流量统计(定死按日前八天让前端传)(车型和方向两个类型)(车型只分大车型)
     * @param request
     * @return
     */
    Result<List<CrossOverviewStatisticReport>> getRoadStatisticReportInLastEightDay(RoadStatisticRequest request);


    /**
     * 获取所有相邻站点流量
     * @param request
     * @return
     */
    Result<List<RoadRankReport>> getStationFlow(CommonRequest request);

    /**
     * 节假日流量-流量总览(单个节假日)
     * @param request
     * @return
     */
    Result<FestivalTrafficReport> getSingleFestivalReport(FestivalTrafficRequest request);

    /**
     * 节假日流量-流量总览(多个节假日)
     * @param request
     * @return
     */
    Result<List<FestivalTrafficReport>> getMultipleFestivalReport(FestivalTrafficRequest request);

    /**
     * 节假日流量-线路流量排名(包括单个节假日和多个节假日)
     * @param request
     * @return
     */
    Result<List<FestivalTrafficRankReport>> getFestivalRoadRankReport(FestivalTrafficRequest request);

    /**
     * 节假日流量-单个节假日的每日总流量
     * @param request
     * @return
     */
    Result<List<FestivalSingleFlowReport>> getFestivalSingleFlowReport(FestivalTrafficRequest request);

    /**
     * 节假日流量-多个节假日的每日总流量
     * @param request
     * @return
     */
    Result<List<FestivalMultipleFlowReport>> getFestivalMultipleFlowReport(FestivalTrafficRequest request);

    /**
     * 节假日流量-单个节假日的每个小时流量趋势
     * @param request
     * @return
     */
    Result<List<FestivalMultipleFlowReport>> getFestivalSingleTrendReport(FestivalTrafficRequest request);

    /**
     * 节假日流量-单个节假日的每日每种车型车辆饼图(精确到小车型)
     * @param request
     * @return
     */
    Result<GantryHourFlowWideVO> getFestivalSingleVehicle(FestivalTrafficRequest request);


    /**
     * 节假日流量-多个节假日中的每个节假日总流量历史趋势
     * @param request
     * @return
     */
    Result<List<FestivalMultipleFlowReport>> getFestivalHistoricalTrend(FestivalTrafficRequest request);

    /**
     * 早晚流量-早高峰和晚高峰流量总览
     * @param request
     * @return
     */
    Result<MorningEveningOverviewReport> getMorningEveningOverviewReport(FestivalTrafficRequest request);


    /**
     * 早晚流量-路段流量早晚排名
     * @param request
     * @return
     */
    Result<MorningEveningRankReport> getMorningEveningRankReport(FestivalTrafficRequest request);


    /**
     * 早晚流量-路段流量早晚每小时流量包含两个接口数据(早晚流量统计+早晚车型流量趋势)
     * @param request
     * @return
     */
    Result<List<MorningEveningHourReport>> getMorningEveningHourReport(FestivalTrafficRequest request);

    /**
     * 早晚流量-路段流量每种车型流量
     * @param request
     * @return
     */
    Result<CrossOverviewStatisticReport> getMorningEveningCarTypeReport(FestivalTrafficRequest request);
}
